Custom Preset Scripting Examples
NOTE: The VLC and VLC+ do not support Custom Presets and thus these will not be available for projects using these controllers.
Matrix
The green randomly scrolling bars from the Matrix film.
Show Code
|
|
-- seed for the random number generator
property("seed", INTEGER, 0, 0)
-- initialise the random number generator
math.randomseed(seed)
-- generate a random period,active,offset value for each column of the effect
table = {}
local i = 0
while (i < width) do
table[i] = { math.random(1, 3), math.random(4, 10)/10, math.random() }
i = i+1
end
-- ramp-down effect curve lookup
function ramp_down(f,period,active,offset)
f = f/period
f = f+offset
f = f-math.floor(f)
if (f>active) then return 0 else return f/active end
end
-- the pixel function
function pixel(frame, x, y)
local t = frame/frames
local period = table[x][1]
local active = table[x][2]
local offset = table[x][3]
local f = ramp_down(y/height,period,active,1-t+offset)
return 0,255*f,0
end
Colour Rain
Similar to Matrix, but the random bars fade between two colours as they drop, also the direction can be set.
Show Code
|
|
-- seed for the random number generator
property("seed", INTEGER, 0, 0)
property("gradient", GRADIENT, 0.0, 255, 128, 0, 0.5, 255, 255, 255, 1.0, 0, 192, 255)
property("reverse", BOOLEAN, false)
property("rotate", BOOLEAN, false)
-- initialise the random number generator
math.randomseed(seed)
-- generate a random period,active,offset value for each column of the effect
table = {}
local i = 0
local dimension = width
if (rotate) then
dimension = height
end
while (i < dimension) do
table[i] = { math.random(1, 3), math.random(4, 10)/10, math.random() }
i = i+1
end
-- ramp-down effect curve lookup
function ramp_down(f,period,active,offset)
f = f/period
f = f+offset
f = f-math.floor(f)
if (f>active) then
return 0
else
return f/active
end
end
-- the pixel function
function pixel(frame, x, y)
local t = frame/frames
local col = x
local row = y
local rowWidth = width
local colHeight = height
if (rotate) then
col = y
row = x
rowWidth = height
colHeight = width
end
if (reverse) then
col = rowWidth - col - 1
row = colHeight - row - 1
end
local period = table[col][1]
local active = table[col][2]
local offset = table[col][3]
local f = ramp_down(row/height,period,active,1-t+offset)
local c = gradient:lookup(row / colHeight)
return colour.new(c.red * f, c.green * f, c.blue * f)
end
Plasma
Generates a classic plasma effect.
Show Code
|
|
-- return a multi-frequency noise value
function plasma(x, y, x_period, y_period)
local cx = width/2-0.5
local cy = height/2-0.5
return (math.cos(((cx-x)/x_period)*math.pi*2)+
math.cos(((cy-y)/y_period)*math.pi*2))/2
end
-- return a colour for a given noise value
function colour(f)
return (math.sin(f*math.pi*4)+1)/2*255,(math.sin(f*math.pi)+1)/2*255,0
end
-- the pixel function
function pixel(frame, x, y)
-- calculate a noise value
local f = plasma(x,y,width,height)
-- offset the noise to animate the effect
local offset = frame/frames*2
-- lookup the colour for the noise value
return colour(f+offset)
end
More Examples
More examples are available on our website.